package bbalgae;

public class J25_Inheritance {

	/* 클래스 확장하기
	 * OOP에서 상속은 매우 중요한 기능이다. 상속을 이용해서 기존코드를 확장시켜 클래스를 만들 수 있다.
	 * 기존 클래스를 확장시켜 새로운 클래스를 만드는 경우 원래 클래스를 부모, 기본 BASE 클래스라 하고 새로운 클래스를 자식, 하위sub 클래스라고한다.
	 * 기본 클래스를 확장하는 행위는 크게 2가지로 나뉜다.
	 * 기본클래스에 없는 새로운 멤버,메소드를 추가하거나 기본 클래스에 있는 이미 있는 메소드를 무시하고 새롭게 재작성 함.
	 * 
	 * 클래스 확장시 extends라는 예약어 사용
	 * 한편, 기본 클래스를 확장하여 새로운 클래스를 확장하는 경우 형성되는 특수한 관게는 is-a 이다.
	 * 예를 들어, Animal 이라는 클래스는 Fish, Tiger, Bug 등의 부모 클래스임
	 * Fish is Animal, Tiger is Animal, Bug is Animal 처럼 is-a 관계 성립
	 * 메소드 재정의 override
	 * 클르새 확장시 부모 클래스의 메소드 동작을 자식 클래스에서 변경할 수 있음.
	 * 단, final로 선언된 메소드는 재정의 불가
	 */
	
	
	public static void main(String[] args) {
		
		J25_ParentClass pc = new J25_ParentClass();
		pc.showMeTheMoney();
		J25_ChildClass cc = new J25_ChildClass();
		cc.showMeTheMoney();
	
		J25_Fish fs = new J25_Fish();
		fs.eat();
	}

}
